package br.com.virtual.cadastrar.model;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import br.com.virtual.base.listener.VirtualEntityListener;
import br.com.virtual.base.model.VirtualModel;

@Entity
@EntityListeners({ VirtualEntityListener.class })
public class Grupo extends VirtualModel implements Comparable<Grupo>{


	private static final long serialVersionUID = 1L;
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@OneToMany(mappedBy = "grupo")
	private List<Categoria> categorias;
	
	private String nome;
	
	private String descricao;
	
	private int ordem;
	
	private boolean ativo = true;

	
	/*
	 * GETTERS AND SETTERS
	 * */
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public int getOrdem() {
		return ordem;
	}

	public void setOrdem(int ordem) {
		this.ordem = ordem;
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public List<Categoria> getCategorias() {
		return categorias;
	}

	public void setCategorias(List<Categoria> categorias) {
		this.categorias = categorias;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Grupo other = (Grupo) obj;
		if (getId() == null) {
			if (other.getId() != null)
				return false;
		} else if (!getId().equals(other.getId()))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Grupo [id=" + getId() + ", nome=" + nome + ", descricao="
				+ descricao + ", ordem=" + ordem + ", ativo=" + ativo + "]";
	}

	@Override
	public int compareTo(Grupo o) {
		return this.nome.trim().toUpperCase()
				.compareTo(o.getNome().trim().toUpperCase());
	}


	@Override
	public Grupo clone() {
		try {
			return (Grupo)super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
			return null;
		
		}
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}
}
